//package yapi;
//
//import com.hydee.common.util.ConvertUtil;
//import com.hydee.common.util.JsonUtil;
//import com.hydee.common.util.StringUtil;
//import demo.Demo;
//import org.apache.poi.hssf.usermodel.HSSFWorkbook;
//import org.apache.poi.ss.usermodel.Row;
//import org.apache.poi.ss.usermodel.Sheet;
//import org.apache.poi.ss.usermodel.Workbook;
//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.FileNotFoundException;
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//public class DemoYApi {
//
//    private final static int TITLE = 0;
//    private final static int PATH = 1;
//    private final static int METHOD = 2;
//    private final static int REQ_BODY_OTHER = 3;
//    private final static int LEVEL = 4;
//    private final static int LEVELID = 5;
//    private final static int PREPRENTID = 6;
//    private final static int PARTTYPE = 7;
//    private final static int ARRAYITEMSTYPE = 8;
//    private final static int ARRAYITEMSDESC = 9;
//    private final static int ENUMDESC = 10;
//    private final static int MIN = 11;
//    private final static int MAX = 12;
//
//    public static void main(String[] args) {
//
//        try {
////            String inpath = "D:/aaaa/yapi1.xlsx";  //数据源Excel
//            String inpath = "D:/aaaa/YApi.xlsx";  //数据源Excel
//            String outpath = "D:/aaaa/yapi/cust1.json";  //输出json文件
//            int index = 2;
//            createStarted(inpath,outpath,index);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//
//    }
//
//
//    public static void createStarted(String tempFilePath,String outpath,int index) {
//        Workbook hssfWorkbook = null;
//        //创建文件输入流
//        FileInputStream is = null;
//        try {
//            is = new FileInputStream(new File(tempFilePath));
//        } catch (FileNotFoundException e) {
//            System.out.println("输入流创建失败！");
//            e.printStackTrace();
//        }
//        try {
//            hssfWorkbook = new XSSFWorkbook(is);
//        } catch (Exception ex) {
//            try {
//                is = new FileInputStream(new File(tempFilePath));
//                hssfWorkbook = new HSSFWorkbook(is);
//            } catch (IOException e) {
//                System.err.println("excel对象创建失败！");
//                e.printStackTrace();
//            }
//        }
//        //虚拟机运行结束删除文件
//        if (is != null) {
//            try {
//                //关闭文件输入流
//                is.close();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//        String name = "";
//        boolean flag = false;
//        List<YApi> yApiList = new ArrayList<>();
//        YApi yApi = new YApi();
//        List<YApiInterface> yApiInterfaceList = new ArrayList<YApiInterface>();
//
//        int numberOfSheets = hssfWorkbook.getNumberOfSheets();//循环全部
////        int numberOfSheets = index;
//
////        if(numberOfSheets<1){
////            return yApiInterfaceList;
////        }
//        for(int i=0;i<numberOfSheets;i++){
//            // 循环工作表Sheet
//            Sheet hssfSheet = hssfWorkbook.getSheetAt(i);
//
//            // 循环行Row
//            //HSSFHeader head= hssfSheet.getHeader();
//            //读取excel中的内容到list中
//            YApiInterface yApiInterface = new YApiInterface();
//            List<Object> objects = new ArrayList<>();
//            HashMap<String, Object> reqHeaders = new HashMap<>();
//            reqHeaders.put("required","1");
//            reqHeaders.put("_id","5cff10af58d6f710ada5e991");
//            reqHeaders.put("name","Content-Type");
//            reqHeaders.put("value","application/json");
//            objects.add(reqHeaders);
//            yApiInterface.setReq_headers(objects);
//            List<Parameter> columnList = new ArrayList<Parameter>();//参数对象集合
//            Map<Integer, Parameter> levelIdParameterMap = new HashMap<>();
//            List<Parameter> zeroParameterList = new ArrayList<>();
//
//
//            List<Parameter> returnValueList = new ArrayList<Parameter>();//返回值对象集合
//            Map<Integer, Parameter> returnValuelevelIdParameterMap = new HashMap<>();
//            List<Parameter> returnValuezeroParameterList = new ArrayList<>();
//
//            for (int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
//                Row hssfRow = hssfSheet.getRow(rowNum);
//                if (hssfRow == null) {
//                    System.out.println(rowNum + "为空");
//                    break;
//                }
////            columnsize = hssfRow.getPhysicalNumberOfCells();
//                if (rowNum < 1) {
//                    continue;
//                }
//
//                if (Demo.getValue(hssfRow.getCell(TITLE)).length() == 0) {
//                    continue;
//                }
//                if (rowNum == 1) {//标题/路径/请求方式
//                    yApiInterface.setTitle(Demo.getValue(hssfRow.getCell(TITLE)));
//                    yApiInterface.setPath(Demo.getValue(hssfRow.getCell(PATH)));
////                yApiInterface.setMethod(Demo.getValue(hssfRow.getCell(METHOD)));
//                    yApiInterface.setReq_body_type(Demo.getValue(hssfRow.getCell(METHOD)));
//                    if(name.length()<1) {
//                        name = Demo.getValue(hssfRow.getCell(REQ_BODY_OTHER));//木块名称
//                    }else{
//                        String temp = Demo.getValue(hssfRow.getCell(REQ_BODY_OTHER));
//                        if(StringUtil.isNotNullTrim(temp)) {
//                            if (!name.equals(temp)) {
//                                flag = true;
//                                name = temp;
//                            }
//                        }
//                    }
//                }
//
//                if (ConvertUtil.convertObjectToInt(Demo.getValue(hssfRow.getCell(PARTTYPE))) == PATH) {//参数
//                    Parameter parameter = new Parameter();
//                    parameter.setName(Demo.getValue(hssfRow.getCell(TITLE)));
//                    String isno = Demo.getValue(hssfRow.getCell(PATH));
//                    int required = 0;
//                    if(isno.equals("是")||isno.equals("否")||"".equals(isno)){
//                        required = isno.equals("是")?1:0;
//                    }else{
//                        required = Integer.valueOf(isno);
//                    }
//                    parameter.setRequired(required);
//                    parameter.setType(Demo.getValue(hssfRow.getCell(METHOD)));
//                    parameter.setDesc(Demo.getValue(hssfRow.getCell(REQ_BODY_OTHER)));
//                    parameter.setLevel(ConvertUtil.convertObjectToInt(Demo.getValue(hssfRow.getCell(LEVEL))));
//                    parameter.setLevelid(ConvertUtil.convertObjectToInt(Demo.getValue(hssfRow.getCell(LEVELID))));
//                    parameter.setParentid(ConvertUtil.convertObjectToInt(Demo.getValue(hssfRow.getCell(PREPRENTID))));
//                    parameter.setArrayItemsType(Demo.getValue(hssfRow.getCell(ARRAYITEMSTYPE)));
//                    parameter.setArrayItemsDesc(Demo.getValue(hssfRow.getCell(ARRAYITEMSDESC)));
//                    parameter.setEnumDesc(Demo.getValue(hssfRow.getCell(ENUMDESC)));
//                    parameter.setMin(Demo.getValue(hssfRow.getCell(MIN)));
//                    parameter.setMax(Demo.getValue(hssfRow.getCell(MAX)));
//                    columnList.add(parameter);
//                    levelIdParameterMap.put(parameter.getLevelid(), parameter);
//                    continue;
//                }
//                ;
//                if (ConvertUtil.convertObjectToInt(Demo.getValue(hssfRow.getCell(PARTTYPE))) == METHOD) {//返回值
//                    Parameter returnValue = new Parameter();
//                    returnValue.setName(Demo.getValue(hssfRow.getCell(TITLE)));
//                    returnValue.setRequired(ConvertUtil.convertObjectToInt(Demo.getValue(hssfRow.getCell(PATH))));
//                    returnValue.setType(Demo.getValue(hssfRow.getCell(METHOD)));
//                    returnValue.setDesc(Demo.getValue(hssfRow.getCell(REQ_BODY_OTHER)));
//                    returnValue.setLevel(ConvertUtil.convertObjectToInt(Demo.getValue(hssfRow.getCell(LEVEL))));
//                    returnValue.setLevelid(ConvertUtil.convertObjectToInt(Demo.getValue(hssfRow.getCell(LEVELID))));
//                    returnValue.setParentid(ConvertUtil.convertObjectToInt(Demo.getValue(hssfRow.getCell(PREPRENTID))));
//                    returnValue.setArrayItemsType(Demo.getValue(hssfRow.getCell(ARRAYITEMSTYPE)));
//                    returnValue.setArrayItemsDesc(Demo.getValue(hssfRow.getCell(ARRAYITEMSDESC)));
//                    returnValue.setEnumDesc(Demo.getValue(hssfRow.getCell(ENUMDESC)));
//                    returnValue.setMin(Demo.getValue(hssfRow.getCell(MIN)));
//                    returnValue.setMax(Demo.getValue(hssfRow.getCell(MAX)));
//                    returnValueList.add(returnValue);
//                    returnValuelevelIdParameterMap.put(returnValue.getLevelid(), returnValue);
//                    continue;
//                }
//            }
//
//            //参数层级封装
//            if (columnList != null && columnList.size() > 0) {
//                for (Parameter parameter : columnList) {
//                    if (parameter.getLevel() == TITLE) {
//                        zeroParameterList.add(parameter);
//                    } else {
//                        Parameter parentParameter = levelIdParameterMap.get(parameter.getParentid());
//                        List<Parameter> sonParameterList = parentParameter.getSonParameterList();
//
//                        if (sonParameterList == null || sonParameterList.size() < 1) {
//                            sonParameterList = new ArrayList<Parameter>();
//                        }
//                        sonParameterList.add(parameter);
//                        parentParameter.setSonParameterList(sonParameterList);
//
//                    }
//                }
//            }
//
//            //返回值层级封装
//            if (returnValueList != null && returnValueList.size() > 0) {
//                for (Parameter parameter : returnValueList) {
//                    if (parameter.getLevel() == TITLE) {
//                        returnValuezeroParameterList.add(parameter);
//                    } else {
//                        Parameter parentParameter = returnValuelevelIdParameterMap.get(parameter.getParentid());
//                        List<Parameter> sonParameterList = parentParameter.getSonParameterList();
//
//                        if (sonParameterList == null || sonParameterList.size() < 1) {
//                            sonParameterList = new ArrayList<Parameter>();
//                        }
//                        sonParameterList.add(parameter);
//                        parentParameter.setSonParameterList(sonParameterList);
//
//                    }
//                }
//            }
//
//            //======================请求参数数据拼接===========================
//            StringBuilder reqBodyOtherStringBuilder = new StringBuilder();
//            reqBodyOtherStringBuilder.append("{\"$schema\": \"http://json-schema.org/draft-04/schema#\",\"type\": \"object\",\"properties\": {");
//            StringBuilder requiredStringBuilder = new StringBuilder("\"required\": [");
//            if (zeroParameterList != null && zeroParameterList.size() > 0) {
//                for (Parameter parameter : zeroParameterList) {
//                    recursive(parameter, reqBodyOtherStringBuilder, requiredStringBuilder);
//                }
//                reqBodyOtherStringBuilder.delete(reqBodyOtherStringBuilder.length() - 1, reqBodyOtherStringBuilder.length());
//            }
//            reqBodyOtherStringBuilder.append("}");
//            if (!requiredStringBuilder.toString().equals("\"required\": [")) {
//                reqBodyOtherStringBuilder.append(",");
//                requiredStringBuilder.delete(requiredStringBuilder.length() - 1, requiredStringBuilder.length());
//                requiredStringBuilder.append("]");
//                reqBodyOtherStringBuilder.append(requiredStringBuilder);
//            }
//            reqBodyOtherStringBuilder.append("}");
//
//
//            //==================返回值数据拼接====================
//
//            StringBuilder resBodyOtherStringBuilder = new StringBuilder();
//            resBodyOtherStringBuilder.append("{\"$schema\": \"http://json-schema.org/draft-04/schema#\",\"type\": \"object\",\"properties\": {");
//            StringBuilder resuiredStringBuilder = new StringBuilder("\"required\": [");
//            if (returnValuezeroParameterList != null && returnValuezeroParameterList.size() > 0) {
//                for (Parameter parameter : returnValuezeroParameterList) {
//                    recursive(parameter, resBodyOtherStringBuilder, resuiredStringBuilder);
//                }
//                resBodyOtherStringBuilder.delete(resBodyOtherStringBuilder.length() - 1, resBodyOtherStringBuilder.length());
//            }
//            resBodyOtherStringBuilder.append("}");
//            if (!resuiredStringBuilder.toString().equals("\"required\": [")) {
//                resBodyOtherStringBuilder.append(",");
//                resuiredStringBuilder.delete(resuiredStringBuilder.length() - 1, resuiredStringBuilder.length());
//                resuiredStringBuilder.append("]");
//                resBodyOtherStringBuilder.append(resuiredStringBuilder);
//            }
//            resBodyOtherStringBuilder.append("}");
//
//            //============================================
//
//            System.out.println(hssfSheet.getSheetName()+"  请求参数======" + reqBodyOtherStringBuilder.toString());
//            System.out.println(hssfSheet.getSheetName()+"  请求结果======" + resBodyOtherStringBuilder.toString());
//            System.out.println("\n\n");
//
//            if(flag){
//                flag = false;
//                yApi.setList(yApiInterfaceList);
//                yApiList.add(yApi);
//                yApi = new YApi();
//                yApiInterfaceList = new ArrayList<>();
//
//            }
//            yApiInterface.setReq_body_other(reqBodyOtherStringBuilder.toString());//设置请求结果
//            yApiInterface.setRes_body(resBodyOtherStringBuilder.toString());//设置返回结果
//            yApiInterfaceList.add(yApiInterface);
//            yApi.setName(name);
//            if(i==numberOfSheets-1){
//                yApi.setList(yApiInterfaceList);
//                yApiList.add(yApi);
//            }
////            return yApiInterface;
//        }
//        String s = JsonUtil.objectToString(yApiList);
//        System.out.println("最终结果》》》》》》》》》"+s);
//        Demo.StringToFile(outpath,s);
//
////            return yApiInterfaceList;
//    }
//
//
//
//    private static void recursive(Parameter parameter, StringBuilder reqBodyOtherStringBuilder, StringBuilder requiredStringBuilder){
//        if(parameter.getRequired()==1){
//            requiredStringBuilder.append("\""+parameter.getName()+"\",");
//        }
//        reqBodyOtherStringBuilder
//                .append("\"")
//                .append(parameter.getName())
//                .append("\"")
//                .append(":")
//                .append("{");
//        if("array".equals(parameter.getType())){
//            reqBodyOtherStringBuilder
//                    .append("\"type\": \"array\"")
//                    .append(",\"items\": {");
//            reqBodyOtherStringBuilder.append("\"type\": \""+parameter.getArrayItemsType()+"\"");
//            StringBuilder sonRequiredStringBuilder = new StringBuilder("\"required\": [");
//            if("object".equals(parameter.getArrayItemsType())){
//                reqBodyOtherStringBuilder.append(",");
//                reqBodyOtherStringBuilder.append("\"properties\": {");
//                if(parameter.getSonParameterList()!=null && parameter.getSonParameterList().size()>0){
//                    for(Parameter sonParameter:parameter.getSonParameterList()){
//                        recursive(sonParameter, reqBodyOtherStringBuilder, sonRequiredStringBuilder);
//                    }
//                    reqBodyOtherStringBuilder.delete(reqBodyOtherStringBuilder.length()-1,reqBodyOtherStringBuilder.length());
//                }
//                reqBodyOtherStringBuilder.append("}");
//            }
//            if(parameter.getArrayItemsDesc()!=null&&parameter.getArrayItemsDesc().trim()!=""){
//                reqBodyOtherStringBuilder.append(",\"description\": \""+parameter.getArrayItemsDesc()+"\"");
//            }
//
//            if(!sonRequiredStringBuilder.toString().equals("\"required\": [")){
//                reqBodyOtherStringBuilder.append(",");
//                sonRequiredStringBuilder.delete(sonRequiredStringBuilder.length()-1,sonRequiredStringBuilder.length());
//                sonRequiredStringBuilder.append("]");
//                reqBodyOtherStringBuilder.append(sonRequiredStringBuilder);
//            }
//            reqBodyOtherStringBuilder.append("}");
//        }else if("object".equals(parameter.getType())){
//            StringBuilder sonRequiredStringBuilder = new StringBuilder("\"required\": [");
//            reqBodyOtherStringBuilder
//                    .append("\"type\": \"object\"")
//                    .append(",\"properties\": {");
//            if(parameter.getSonParameterList()!=null && parameter.getSonParameterList().size()>0){
//                for(Parameter sonParameter:parameter.getSonParameterList()){
//                    recursive(sonParameter, reqBodyOtherStringBuilder, sonRequiredStringBuilder);
//                }
//                reqBodyOtherStringBuilder.delete(reqBodyOtherStringBuilder.length()-1,reqBodyOtherStringBuilder.length());
//            }
//            reqBodyOtherStringBuilder.append("}");
//            if(!sonRequiredStringBuilder.toString().equals("\"required\": [")){
//                reqBodyOtherStringBuilder.append(",");
//                sonRequiredStringBuilder.delete(sonRequiredStringBuilder.length()-1,sonRequiredStringBuilder.length());
//                sonRequiredStringBuilder.append("]");
//                reqBodyOtherStringBuilder.append(sonRequiredStringBuilder);
//            }
//        }else{
//            reqBodyOtherStringBuilder.append("\"type\": \""+parameter.getType()+"\"");
//        }
//        if(parameter.getDesc()!=null && parameter.getDesc().trim()!=""){
//            reqBodyOtherStringBuilder.append(",\"description\": \""+parameter.getDesc()+"\"");
//        }
//
//        if(parameter.getType()!=null){
//            String type = parameter.getType();
//            String ddd =null;
//
//            if("string".equals(type)){
//                ddd="@string";
//            }
//            if("integer".equals(type)){
//                ddd="@integer";
//            }
//
//            if(ddd!=null){
//                reqBodyOtherStringBuilder.append(",\"mock\": {\"mock\":\"").append(ddd).append("\"}");
//            }
//        }
//        if(StringUtil.isNotNullTrim(parameter.getEnumDesc())){
//            reqBodyOtherStringBuilder.append(",\"enumDesc\":").append("\"").append(parameter.getEnumDesc()).append("\"");
//        }
//        if(StringUtil.isNotNullTrim(parameter.getMin())){
//            String type = parameter.getType();
//            String min = "";
//            if("string".equals(type)){
//                min = "minLength";//maxLength
//            }else if("integer".equals(type)){
//                min = "minimum";
//            }
//            reqBodyOtherStringBuilder.append(",\"").append(min).append("\":").append(parameter.getMin());
//        }
//        if(StringUtil.isNotNullTrim(parameter.getMax())){
//            String type = parameter.getType();
//            String max = "";
//            if("string".equals(type)){
//                max = "maxLength";
//            }else if("integer".equals(type)){
//                max = "maximum";
//            }
//            reqBodyOtherStringBuilder.append(",\"").append(max).append("\":").append(parameter.getMax());
//        }
//
//        reqBodyOtherStringBuilder.append("},");
//    }
//
//
//}
